/**
 * @param {number} n
 * @return {number}
 */
var nthUglyNumber = function (n) {
	// 初始化一个长度为n的全1数组
	const dp = new Array(n).fill(1);
	let p2 = 0, p3 = 0, p5 = 0;
	for (let i = 1; i < n; i++) {
		// 下一个可能的丑数（三种情况）
		const num2 = dp[p2] * 2, num3 = dp[p3] * 3, num5 = dp[p5] * 5;
		// 确定下一个丑数
		dp[i] = Math.min(Math.min(num2, num3), num5);
		if (dp[i] === num2) {
			p2++;
		}
		if (dp[i] === num3) {
			p3++;
		}
		if (dp[i] === num5) {
			p5++;
		}
	}
	return dp[n - 1];
};